// Package menu @Title menu[简述该包的主要作用]
// @Description
// @Author  cnHuaShao
// @since v0.0.1
// @Version v1.0.0
// @Date 2024/5/1 0:28
// @Update 2024/5/1 0:28
package menu

import (
	"FinancialManagement/src/base/db"
	"fmt"
)

// GetMenuInfoForRoleId
// @Description: 依据角色获取授权的菜单列表
// @param roleId
// @return menuInfoList
// @return err
func GetMenuInfoForRoleId(roleId int) (menuInfoList []MenuInfo, err error) {
	sql := fmt.Sprintf("SELECT  mi.id, mi.title, mi.icon, mi.path, mi.component, mi.children, mi.redirect, mi.affix,   mi.parentId, mi.`name`, mi.hideInMenu, mi.parentKeys, mi.isIframe, mi.url, mi.hideInBreadcrumb, mi.hideChildrenInMenu,   mi.keepAlive, mi.target, mi.locale FROM role_menu_relation as rm LEFT JOIN menu_info AS mi ON mi.id=rm.menuId WHERE rm.roleId=%d",
		roleId)
    res, err := db.Res.DB.GetDbW().Raw(sql).Rows()
    if err != nil {
        return nil, err
    }
    defer res.Close()
    for res.Next() {
        menuInfo := MenuInfo{}
        res.Scan(&menuInfo.ID, &menuInfo.Title, &menuInfo.Icon,
            &menuInfo.Path, &menuInfo.Component, &menuInfo.Children, &menuInfo.Redirect, &menuInfo.Affix,
            &menuInfo.ParentID, &menuInfo.Name, &menuInfo.HideInMenu, &menuInfo.ParentKeys, &menuInfo.IsIframe,
            &menuInfo.URL, &menuInfo.HideInBreadcrumb, &menuInfo.HideChildrenInMenu, &menuInfo.KeepAlive, &menuInfo.Target, &menuInfo.Locale)
        menuInfoList = append(menuInfoList, menuInfo)
    }
	return menuInfoList, nil
}

// CreateMenu
// @Description: 创建菜单
// @param menu
// @return error
func CreateMenu(menu *MenuInfo) error {
	result := db.Res.DB.GetDbW().Create(menu)
	if result.Error != nil {
		return result.Error
	}
	return nil
}

// GetMenuByID
// @Description: 根据ID获取菜单
// @param id
// @return *MenuInfo
// @return error
func GetMenuByID(id uint) (*MenuInfo, error) {
	var menu MenuInfo
	result := db.Res.DB.GetDbW().First(&menu, id)
	if result.Error != nil {
		return nil, result.Error
	}
	return &menu, nil
}

// UpdateMenuByID
// @Description: 根据ID更新菜单
// @param id
// @param updates
// @return error
func UpdateMenuByID(id uint, updates map[string]interface{}) error {
	result := db.Res.DB.GetDbW().Model(&MenuInfo{}).Where("id = ?", id).Updates(updates)
	if result.Error != nil {
		return result.Error
	}
	return nil
}

// DeleteMenuByID
// @Description: 根据ID删除菜单
// @param id
// @return error
func DeleteMenuByID(id uint) error {
	result := db.Res.DB.GetDbW().Delete(&MenuInfo{}, id)
	if result.Error != nil {
		return result.Error
	}
	return nil
}
